# include <bits/stdc++.h>
# define MAXN (int)1e6 + 10
# define mid ((l + r) >> 1)
using namespace std;

inline char getc() { 
    static char buf[1 << 18], *fs, *ft;
    return (fs == ft && (ft = (fs = buf) + fread(buf, 1, 1 << 18, stdin)), fs == ft) ? EOF : *fs++;
}

inline int gn() { 
    int k = 0, f = 1;
    char c = getc();
    for(; !isdigit(c); c = getc()) if(c == '-') f = -1;
    for(; isdigit(c); c = getc()) k = k * 10 + c - '0';
    return k * f;
}

struct ask { 
    int l, r, id;
    bool operator < (const ask &a) const { 
        return l < a.l;
    }
};

int n, m, la[MAXN], ne[MAXN], x[MAXN], ans[MAXN];
bool f[MAXN];
vector <ask> d;

inline int lb(int x) {return x & -x;}

inline void add(int k, int p) { //更新k之后的数
    for(int i = k; i <= n; i += lb(i)) x[i] += p;
}

inline int query(int k) { 
    int res = 0;
    for(int i = k; i; i -= lb(i)) res += x[i];
    return res;
}

int main() { 
# ifndef LOCAL
    freopen("diff.in", "r", stdin);
    freopen("diff.out", "w", stdout);
# else
    freopen("in", "r", stdin);
# endif
    n = gn();
    for(int k, i = 1; i <= n; i++) { 
        k = gn();
        if(!la[k]) { 
            la[k] = i;
            f[i] = 1;
        }
    }
    for(int i = 1; i <= n; i++) { 
        printf("%d ", ne[i]);
    }
}

